improvement(landing): react-doctor health pass across the landing surface#5326
Conversation
…face - shared JsonLd server component with HTML-safe serialization (replaces 32 inline dangerouslySetInnerHTML JSON-LD sites; structured-data output semantically identical, XSS hardened) - state/effect fixes: derive-instead-of-sync, phase state machines, useSyncExternalStore for media query, handler-only state to refs - structural splits for one-component-per-file and non-component export isolation - mechanical: combined iterations, hoisted Intl formatters/static values, immutable sorts, stable keys, a11y labels, focus rings, SVG precision - ES2023 lib for apps/sim to allow toSorted/toReversed
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
PR SummaryLow Risk Overview Structured data: A shared server React correctness: Structure & tooling: Splits (hero Mechanical polish: Hoisted static callouts and JSON-LD graphs, module-scoped Reviewed by Cursor Bugbot for commit 5f55b8b. Configure here. |
Greptile SummaryThis PR improves the landing surface and cleans up React health issues. The main changes are:
Confidence Score: 5/5This looks safe to merge.
Important Files Changed
Reviews (4): Last reviewed commit: "style(landing): convert added inline com..." | Re-trigger Greptile |
…ignup redirect) - guard the pending provider-status fetch with openRequestedRef so a late resolve can't reopen the modal or re-fire the opened event after dismiss - open synchronously (loader) when status is still loading so the click stays responsive - route to /login instead of /signup when registration is disabled and no modal providers are available
|
@greptile review |
|
@cursor review |
- reactive isDesktop can re-run the demo effect on a 1024px resize; reset demoIndexRef to 0 so applyDemoStep(step 0) and scheduleNextStep read the same step, instead of replaying from a stale index and skipping beats - clarify why the chat reveal's previous-value ref is safe here (timer-driven, no concurrent-interruption boundary)
|
@greptile review |
|
@cursor review |
…mpt-row lookup - auth-modal: consume openRequestedRef on resolve so a queued double-click (or the shared mount prefetch) can't run openWithStatus twice (no duplicate auth_modal_opened / redundant setView) - landing-preview-knowledge: key connector icons by a stable slug instead of a component name that can be mangled/emptied under minification - workflow-data getEditorPrompt: single ordered pass preserves the original find() first-match-in-order semantics (Map lookup had preferred 'Prompt' over an earlier 'System Prompt')
|
@greptile review |
|
@cursor review |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 5f55b8b. Configure here.
…5340) toSorted/toReversed require Safari 16+/iOS 16+ and Next.js/SWC does not polyfill prototype methods (vercel/next.js#58421 closed unmerged), so #5326 broke sorting on the models page and landing preview for Safari 15/iOS 15 with a runtime TypeError. Revert the 6 call sites to [...arr].sort()/[...arr].reverse() (immutable, universally supported, matches the existing codebase idiom) and drop the ES2023 tsconfig lib override that only existed to type-check them.
Summary
<JsonLd>server component with HTML-safe serialization — replaces 32 inlinedangerouslySetInnerHTML={{ __html: JSON.stringify(...) }}JSON-LD sites. Structured-data output is JSON-semantically identical (crawlers parse the same graph) and now XSS-hardened. SEO unchanged.useSyncExternalStorefor the desktop media query, handler-only state moved to refs (contact honeypot-widget, changelog page cursor).Intlformatters + static values to module scope, immutable sorts, stable content-derived keys, accessible labels, focus-visible rings, rounded SVG path precision.apps/simTSlibbumped to ES2023 to allowtoSorted/toReversed(runtime already supports them).react-doctor on
app/(landing): score 52 → 66, 5 errors → 0, 150 findings → 32. Remaining are intentional animation/SSR patterns and correct semantic HTML; nothing hacky, no suppressions.Type of Change
Testing
Full
tscclean (0 errors),biome checkclean, react-doctor re-run. JSON-LD output verified byte-lossless (parses back to identical graph). Behavioral diffs audited for regressions.Checklist